Skip to content

GLTF 格式简介 (Web3D 领域 JPG)

gltf 格式的重要性

GLTF 格式是新 2015 发布的三维模型格式,随着物联网、WebGL、5G 的进一步发展,会有越来越多的互联网项目 Web 端引入 3D 元素,你可以把 GLTF 格式的三维模型理解为.jpg、.png 格式的图片一样,现在的网站,图片基本是标配,对于以后的网站来说如果需要展示一个场景,使用 3D 来替换图片表达也是很正常的事情,图片有很多格式,对于三维模型自然也是如此,Web 开发的时候图片会有常用格式,对于 Web3D 开发也一样,肯定会根据需要选择一个常见的大家都熟悉的格式,随时时间的发展,GLTF 必然称为一个极为重要的标准格式

不仅 three.js,其它的 WebGL 三维引擎 cesium、babylonjs 都对 gltf 格式有良好的的支持

GLTF 2.0

Khronos Group 组织 2015 发布了 GLTF 1.0 版本,在 2017 年又发布了 GLTF2.0 的版本

关于 glTF 的更多介绍和信息,可以查看 github:https://github.com/KhronosGroup/glTF

gltf 包含内容

相比较 obj、stl 等格式而言,.gltf 格式可以包含更多的模型信息

.gltf 格式文件几乎可以包含所有的三维模型相关信息的数据,比如模型层级关系、PBR 材质、纹理贴图、骨骼动画、变形动画等等

GLTF 格式信息

如果你有一定的前端基础,那么你对 JSON 一定不陌生,GLTF 文件就是通过 JSON 的键值对方式来表示模型信息,比如 meshes 表示网格模型信息,materials 表示材质信息...

js
{
  "asset": {
    "version": "2.0",
  },
...
// 模型材质信息
  "materials": [
    {
      "pbrMetallicRoughness": {//PBR材质
        "baseColorFactor": [1,1,0,1],
        "metallicFactor": 0.5,//金属度
        "roughnessFactor": 1//粗糙度
      }
    }
  ],
  // 网格模型数据
  "meshes": ...
  // 纹理贴图
  "images": [
        {
            // uri指向外部图像文件
            "uri": "贴图名称.png"//图像数据也可以直接存储在.gltf文件中
        }
   ],
     "buffers": [
    // 一个buffer对应一个二进制数据块,可能是顶点位置 、顶点索引等数据
    {
      "byteLength": 840,
     //这里面的顶点数据,也快成单独以.bin文件的形式存在
      "uri": "data:application/octet-stream;base64,AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAC/.......
    }
  ],
}

.bin 文件

有些 glTF 文件会关联一个或多个.bin 文件,.bin 文件以二进制形式存储了模型的顶点数据等信息, .bin 文件中的信息其实就是对应 gltf 文件中的 buffers 属性,buffers.bin 中的模型数据,可以存储在.gltf 文件中,也可以单独一个二进制.bin 文件

js
"buffers": [
    {
        "byteLength": 102040,
        "uri": "文件名.bin"
    }
]

二进制.glb

gltf 格式文件不一定就是以扩展名.gltf 结尾,.glb 就是 gltf 格式的二进制文件,比如你可以把.gltf 模型和贴图信息全部合成得到一个.glb 文件中,.glb 文件相对.gltf 文件体积更小,网络传输自然更快

导出 gltf

blender:最新版本可以直接导出 gltf

3damx gltf 相关插件:https://github.com/BabylonJS/Exporters/releases

Blender 导入导出 gltf 模型文件

你可以用 Blender 软件导出绘制好的三维模型,也可以打开和预览 gltf 格式文件模型

上次更新于: